package com.ycg.biquge.service;

import com.ycg.biquge.common.Result;
import com.ycg.biquge.pojo.Novel;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ycg.biquge.pojo.vo.CategoryVos;
import com.ycg.biquge.pojo.vo.DetailNovelVo;
import com.ycg.biquge.pojo.vo.Recommend;
import com.ycg.biquge.pojo.vo.SimpleNovel;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
* @author lenovo
* @description 针对表【novel(小说信息表)】的数据库操作Service
* @createDate 2024-04-16 21:28:48
*/
public interface NovelService extends IService<Novel> {


    /**
     * 获取热门小和top推荐小说
     *
     * @return map hots:[]   tops:[]
     */
    Result<Map<String, List<Novel>>> getHotAndTop();

    /**
     * 获取首页 分类列表, 热门
     *
     * @return map: category1:CategoryVos, category2:CategoryVos ...
     */
    Result<Map<String, CategoryVos>> getCategory();

    /**
     * 获取分类下的小说
     *
     * @param page 当前页, 每页固定15个实例
     * @param type 分类类型
     * @return 小说列表
     */
    Result<List<Novel>> getCategoryList(Integer page, String type);

    /**
     * 根据id 获取小说详细信息 包括章节信息
     * @param id 当前小说id
     * @return 小说信息 + 章节列表
     */
    Result<DetailNovelVo> getDetailById(Integer id);

    /**
     * 根据id 获取小说简要信息
     * @param id 当前小说id
     * @return 简要小说信息
     */
    Result<Novel> getSimpleById(Integer id);

    /**
     * 获取首页最近更新和上架的小说列表 每个 30条
     *
     * @return 最近更新小说 和 最新入库小说
     */
    Result<Map<String, List<Novel>>> getNew();

    /**
     * 获取已经完本的小说
     *
     * @return 小说列表
     */
    Result<List<Novel>> getFinish(Integer page);

    /**
     * 获取各类型小说排行
     *  每个分类取前50个
     * @return key:小说类型  value:该类型下前50个列表
     */
    Result<Map<String, List<SimpleNovel>>> getRanking();

    /**
     * 根据分类查询新书
     * @param type 小说分类
     * @return 小说id+名称
     */
    Result<List<Recommend>> getRecommendByType(String type);
}
